package com.cj.mobile.iabp.app.utils;

import android.text.InputFilter;
import android.text.InputType;
import android.widget.EditText;

/**
 * 小数点输入框工具类
 * 调用方式：
 * // 一行代码设置，限制小数点后2位
 * DecimalInputUtils.setupDecimalInput(editText, 2);
 *
 * // 创建输入框数组
 * EditText[] decimalInputs = {editText1, editText2, editText3, editText4};
 *
 * // 批量设置，限制小数点后2位
 * DecimalInputUtils.setupDecimalInputs(decimalInputs, 2);
 */
public class DecimalInputUtils {

    /**
     * 一行代码设置小数点约束（推荐使用）
     */
    public static void setupDecimalInput(EditText editText, int decimalPlaces) {
        editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        editText.setFilters(new InputFilter[] { createDecimalFilter(decimalPlaces) });
    }

    /**
     * 为多个输入框设置约束
     */
    public static void setupDecimalInputs(EditText[] editTexts, int decimalPlaces) {
        for (EditText editText : editTexts) {
            setupDecimalInput(editText, decimalPlaces);
        }
    }

    private static InputFilter createDecimalFilter(final int decimalPlaces) {
        return (source, start, end, dest, dstart, dend) -> {
            String newText = dest.toString().substring(0, dstart) +
                    source.toString() +
                    dest.toString().substring(dend);

            if (newText.isEmpty()) return null;

            // 不允许以小数点开头
            if (newText.equals(".")) return "0.";

            // 检查小数点数量
            int dotCount = 0;
            for (int i = 0; i < newText.length(); i++) {
                if (newText.charAt(i) == '.') dotCount++;
            }
            if (dotCount > 1) return "";

            // 检查小数点后位数
            if (newText.contains(".")) {
                int dotPos = newText.indexOf(".");
                if (newText.length() - dotPos - 1 > decimalPlaces) {
                    return "";
                }
            }

            return null;
        };
    }
}
